#include <memory>
#include <functional>

#include <dirent.h>
#include <sys/types.h>
#include <unistd.h>

using getpid_mock_fn = std::function<pid_t(void)>;
extern getpid_mock_fn g_getpid_mock;

using scandir_mock_fn = std::function<int(const char *, struct dirent ***, int (*)(const struct dirent *), int (*)(const struct dirent **, const struct dirent **))>;
extern scandir_mock_fn g_scandir_mock;

using fopen_mock_fn = std::function<FILE*(const char *filename, const char *mode)>;
extern fopen_mock_fn g_fopen_mock;

using fread_mock_fn = std::function<size_t(void *, size_t, size_t, FILE *)>;
extern fread_mock_fn g_fread_mock;

using fclose_mock_fn = std::function<int(FILE *)>;
extern fclose_mock_fn g_fclose_mock;
